/**
*
*/
package org.zengsource.mvc.action;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import org.zengsource.mvc.MvcContext;
import org.zengsource.mvc.MvcException;
import org.zengsource.mvc.view.AbstractView;
import org.zengsource.mvc.view.RedirectView;
/**
* @author zeng.xiaoning
*
*/
public abstract class AbstractAction implements Serializable {
private static final long serialVersionUID = 1L;
// ~ 对象属性 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
protected Logger logger = Logger.getLogger(getClass());
// ~ 构造方法 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
public AbstractAction() {
logger.info("New :: " + getClass().getName());
}
// ~ 逻辑方法 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
protected void doInit() throws MvcException {
if (getRequest() != null) {
try {
getRequest().setCharacterEncoding("utf-8");
getResponse().setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
throw new MvcException(e);
}
Enumeration<?> paramNames = getRequest().getParameterNames();
while (paramNames.hasMoreElements()) {
String name = (String) paramNames.nextElement();
String value = getRequest().getParameter(name);
logger.info("Normal save: " + value);
// try {
// value = new String(value.getBytes("ISO-8859-1"));
// logger.info("8859_1 save: " + value);
// value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
// logger.info("UTF-8 保存: " + value);
// value = new String(value.getBytes("8859_1"), "GBK");
// logger.info("GBK save: " + value);
// } catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
// }
setFieldValue(name, value);
}
}
}
protected void setFieldValue(String name, String value) throws MvcException {
logger.info("Save parameter: [" + name + "] = [" + value + "]");
try {
BeanUtils.setProperty(this, name, value);
} catch (IllegalAccessException e) {
throw new MvcException(e);
} catch (InvocationTargetException e) {
throw new MvcException(e);
}
}
protected abstract AbstractView doService() throws MvcException;
public AbstractView doRun() throws MvcException {
doInit();
AbstractView view = doService();
doDestroy();
return view;
}
protected void doDestroy() throws MvcException {
}
protected void redirect(String url) throws MvcException {
getRequest().setAttribute("_VIEW_", new RedirectView(url));
}
protected MvcContext getContext() {
return MvcContext.getInstance();
}
protected HttpServletRequest getRequest() {
return getContext().getRequest();
}
protected HttpServletResponse getResponse() {
return getContext().getResponse();
}
protected HttpSession getSession(boolean create) {
return getRequest().getSession(create);
}
public void setAttribute(String name, Object data) {
getContext().setAttribute(name, data);
}
// ~ g^setX ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
public abstract String getActionName();
}